package com.tsinghuabigdata.edu.ddmath.util;

/**
 * Created by 28205 on 2016/8/30.
 */

import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Environment;
import android.util.Log;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class FileUtil {
    private static final int FILE_SIZE = 4 * 1024;
    private static final String TAG = "FileUtil";

    public static boolean hasSdcard() {
        String status = Environment.getExternalStorageState();
        if (status.equals(Environment.MEDIA_MOUNTED)) {
            return true;
        }
        return false;
    }

    public static boolean createPath(String path) {
        File f = new File(path);
        if (!f.exists()) {
            Boolean o = f.mkdirs();
            Log.i(TAG, "create dir:" + path + ":" + o.toString());
            return o;
        }
        return true;
    }

    public static boolean exists(String file) {
        return new File(file).exists();
    }

    public static File saveFile(String file, InputStream inputStream) {
        File f = null;
        OutputStream outSm = null;

        try {
            f = new File(file);
            String path = f.getParent();
            if (!createPath(path)) {
                Log.e(TAG, "can't create dir:" + path);
                return null;
            }

            if (!f.exists()) {
                f.createNewFile();
            }

            outSm = new FileOutputStream(f);
            byte[] buffer = new byte[FILE_SIZE];
            while ((inputStream.read(buffer)) != -1) {
                outSm.write(buffer);
            }
            outSm.flush();
        } catch (IOException ex) {
            AppLog.d( ex.toString() );
            return null;

        } finally {
            try {
                if (outSm != null) outSm.close();
            } catch (IOException ex) {
                AppLog.d( ex.toString() );
            }
        }
        Log.v(TAG, "[FileUtil]save file:" + file + ":" + Boolean.toString(f.exists()));

        return f;
    }

    /**
     * 保存文件
     *
     * @param fileName 文件名
     * @param content  文件内容
     * @throws Exception
     */
    public static void saveHtml(String fileName, String content) throws Exception {

        // 由于页面输入的都是文本信息，所以当文件名不是以.txt后缀名结尾时，自动加上.txt后缀
        if (!fileName.endsWith(".html")) {
            fileName = fileName + ".html";
        }

        // Context.MODE_PRIVATE：为默认操作模式，代表该文件是私有数据，只能被应用本身访问，在该模式下，写入的内容会覆盖原文件的内容，如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND
        // Context.MODE_APPEND：模式会检查文件是否存在，存在就往文件追加内容，否则就创建新文件。
        // Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件。
        // MODE_WORLD_READABLE：表示当前文件可以被其他应用读取；MODE_WORLD_WRITEABLE：表示当前文件可以被其他应用写入。
        // 如果希望文件被其他应用读和写，可以传入：
        // openFileOutput("output.txt", Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);
        File f = new File(fileName);
        if (!f.exists()) {
            f.createNewFile();
        }
        FileOutputStream fos = new FileOutputStream(f);
        fos.write(content.getBytes("utf-8"));
        fos.close();
    }

    public static boolean delFile(String file) {
        File f = null;
        f = new File(file);

        if (!f.exists()) {
            return false;
        }
        return f.delete();
    }

    public static Drawable getImageDrawable(String file) {
        if (!exists(file)) return null;
        try {
            InputStream inp = new FileInputStream(new File(file));
            return BitmapDrawable.createFromStream(inp, "img");
        } catch (Exception ex) {
            AppLog.d( ex.toString() );
        }
        return null;
    }
}